這個章節我們就來介紹 Reinforcement,另外一個大名鼎鼎的Q-function,歡迎大家迎駕到數年前的文章觀看 → Day17~Day22
沒錯你沒看錯,它就叫做 Reinforce 就是整個強化學習的根基,還會有一個 critic 指示我們的演算法( policy )每個動作的價值。這是我們就來跑一個toy case,讓大家體驗強化學習的樂趣。
這裡我們借用 pytorch examples 來教學
這邊我們可以看到 35 行
class Policy(nn.Module):
"""
implements both actor and critic in one model
"""
def __init__(self):
super(Policy, self).__init__()
self.affine1 = nn.Linear(4, 128)
# actor's layer
self.action_head = nn.Linear(128, 2)
# critic's layer
self.value_head = nn.Linear(128, 1)
# action & reward buffer
self.saved_actions = []
self.rewards = []
這裡我們會把 Reinforce 的網路抽象化,用 Policy 的名字去建立它,這邊會有三層網路
def forward(self, x):
"""
forward of both actor and critic
"""
x = F.relu(self.affine1(x))
# actor: choses action to take from state s_t
# by returning probability of each action
action_prob = F.softmax(self.action_head(x), dim=-1)
# critic: evaluates being in the state s_t
state_values = self.value_head(x)
# return values for both actor and critic as a tuple of 2 values:
# 1. a list with the probability of each action over the action space
# 2. the value from state s_t
return action_prob, state_values
forward 這邊就是處理網路的計算了,這邊可以看到有兩個輸出,action_head 跟 value_head:
action_head 出來後,會先經過一個 softmax layer ,這裡確保輸出的動作可以在,全部輸出總值為1,且不為負數的值,這種符合機率條件的神經網路模型。你就想像你的遊戲控制移動就只有,往前走、往後移動以及不做任何動作。範例:P = p(往前走) + p(往後移動) + p(不做任何動作) = 1
我們在這章節看到了最原生的 Reinforce 演算法,再進階則有PPO (Proximal Policy Optimization)畈化性更強的演算法,但我們這邊可以看到,它的基底,Policy,則是以兩種輸出所構成,機率與值估計。下一章節,我們會再講更細節的如何計算與更新網路的部分